package com.webQ.controller; import co.paralleluniverse.fibers.Fiber; import co.paralleluniverse.fibers.SuspendExecution; import co.paralleluniverse.fibers.httpasyncclient.FiberCloseableHttpAsyncClient; import co.paralleluniverse.fibers.httpclient.FiberHttpClient; import co.paralleluniverse.fibers.httpclient.FiberHttpClientBuilder; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import com.webQ.Serializers.Serializer; import com.webQ.model.ConstantTimer; import com.webQ.model.DbTestPlan; import com.webQ.model.HttpRequest; import com.webQ.model.Output; import com.webQ.model.RegexExtractor; import com.webQ.model.Test; import com.webQ.model.TestPlan; import com.webQ.model.WsRequest; import com.webQ.model.WsTestPlan; import com.webQ.service.HelloWorldService; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.nio.client.CloseableHttpAsyncClient; import org.apache.http.impl.nio.client.HttpAsyncClients; import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager; import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor; import org.apache.http.nio.reactor.ConnectingIOReactor; import org.apache.http.nio.reactor.IOReactor; import org.apache.http.nio.reactor.IOReactorException; import org.apache.http.protocol.HttpContext; import org.apache.log4j.Logger; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.apache.http.impl.nio.reactor.IOReactorConfig; import org.apache.http.client.config.RequestConfig; import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; /*import org.apache.log4j.Logger;*/ import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.crypto.spec.PSource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @Scope("session") @Controller public class MainController implements Serializable { public final static Logger logger = Logger.getLogger(MainController.class); // public static Boolean test = true; private List<TestPlan> testPlans; private List<DbTestPlan> dbTestPlans; private List<WsTestPlan> wsTestPlans; // private final HelloWorldService helloWorldService; private List<Object> testPlan; private List<Integer> httpreqlist; // private Map<String, List<String>> globalregexmap; private Test randomtest; private Test normaltest; private Test dbtest; private Test wstest; // private List<Output> outputlist; public static final CloseableHttpClient client = FiberHttpClientBuilder .create(10).setMaxConnPerRoute(100000).setMaxConnTotal(10000) .build(); /* * @Autowired public MainController(HelloWorldService helloWorldService) * throws SuspendExecution { this.helloWorldService = helloWorldService; } */ @RequestMapping(value = "/", method = RequestMethod.GET) public ModelAndView home(HttpSession session) throws SuspendExecution, IOReactorException { // testPlans.clear(); // dbTestPlans.clear(); // wsTestPlans.clear(); // testPlan.clear(); // httpreqlist.clear(); // globalregexmap.clear(); // outputlist.clear(); // test = true; // String // val=RequestContextHolder.currentRequestAttributes().getSessionId(); // System.out.println(session.getId()); randomtest = new Test(); normaltest = new Test(); dbtest = new Test(); wstest = new Test(); testPlans = new ArrayList<TestPlan>(); dbTestPlans = new ArrayList<DbTestPlan>(); wsTestPlans = new ArrayList<WsTestPlan>(); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); // outputlist = new ArrayList<Output>(); // globalregexmap = new HashMap<String, List<String>>(); return new ModelAndView("home", "command", new TestPlan()); } @RequestMapping(value = "/consttimer", method = RequestMethod.POST) public @ResponseBody void home_page( @ModelAttribute("SpringWeb") ConstantTimer timer, @RequestParam("rownum") int rownum, BindingResult result) throws SuspendExecution { if (rownum == testPlan.size()) testPlan.add(timer); else testPlan.set(rownum, timer); } @RequestMapping(value = "/regexextractor", method = RequestMethod.POST) public @ResponseBody void home_page( @ModelAttribute("SpringWeb") RegexExtractor regexex, @RequestParam("rownum") int rownum, BindingResult result) throws SuspendExecution { // System.out.println(regexex.getRefName()); // System.out.println(regexex.getGlobal()); if (rownum == testPlan.size()) testPlan.add(regexex); else testPlan.set(rownum, regexex); } @RequestMapping(value = "/httpgetreq", method = RequestMethod.POST) public @ResponseBody void home_page( @ModelAttribute("SpringWeb") HttpRequest req, @RequestParam("rownum") int rownum) throws SuspendExecution { if (rownum == testPlan.size()) { testPlan.add(req); httpreqlist.add(rownum); } else testPlan.set(rownum, req); // TestPlan.displayPlan(); } /* * @RequestMapping(value = "/httppostreq", method = RequestMethod.POST) * public @ResponseBody void home_page(@RequestBody String tabdata) throws * SuspendExecution { */ @RequestMapping(value = "/httppostreq", method = RequestMethod.POST) public @ResponseBody void home_page(@RequestParam("tabdata") String tabdata) throws SuspendExecution { HttpRequest req = new HttpRequest(); JSONObject obj = new JSONObject(tabdata); int rownum = obj.getInt("rownum"); req.setUrl(obj.getString("url")); req.setHttpType(obj.getString("httpType")); req.setPostBody(obj.getString("postBody")); Map<String, String> postParamList = new HashMap<String, String>(); System.out.println(req.getUrl()); JSONArray paramtable = obj.getJSONArray("postParams"); for (int i = 0; i < paramtable.length(); ++i) { JSONObject params = paramtable.getJSONObject(i); postParamList.put(params.get("Param Name").toString(), params.get("Param Value").toString()); } req.setPostParamList(postParamList); if (rownum == testPlan.size()) { testPlan.add(req); httpreqlist.add(rownum); } else testPlan.set(rownum, req); // TestPlan.displayPlan(); } @RequestMapping(value = "/remove", method = RequestMethod.POST) public @ResponseBody void home_page(@RequestParam("rownum") int rownum) throws SuspendExecution { // System.out.println(rownum); int flag = 0; if (rownum < testPlan.size()) { testPlan.remove(rownum); for (int i = 0; i < httpreqlist.size(); i++) { if (flag == 1) { httpreqlist.set(i, httpreqlist.get(i) - 1); } else if (httpreqlist.get(i) >= rownum) { if (httpreqlist.get(i) == rownum) { httpreqlist.remove(i); } i--; flag = 1; } } } // TestPlan.displayPlan(); } @RequestMapping(value = "/savenormaltestplan", method = RequestMethod.POST) public @ResponseBody void home_page( @ModelAttribute("SpringWeb") TestPlan newTestPlan) throws SuspendExecution { newTestPlan.setTestPlan(testPlan); newTestPlan.setHttpreqlist(httpreqlist); /* * System.out.println("Duration : " + newTestPlan.getDuration()); * System.out.println("Delay : " + newTestPlan.getStartDelay()); */ // newTestPlan.displayPlan(); /* * for(int i=0;i<httpreqlist.size();i++) * System.out.println(httpreqlist.get(i)); newTestPlan.displayPlan(); */ testPlans.add(newTestPlan); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); } @RequestMapping(value = "/saverandomtestplan", method = RequestMethod.POST) public @ResponseBody void home_page_random( @ModelAttribute("SpringWeb") TestPlan newTestPlan) throws SuspendExecution { newTestPlan.setTestPlan(testPlan); newTestPlan.setHttpreqlist(httpreqlist); // newTestPlan.displayPlan(); /* * for(int i=0;i<httpreqlist.size();i++) * System.out.println(httpreqlist.get(i)); newTestPlan.displayPlan(); */ testPlans.add(newTestPlan); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); } @RequestMapping(value = "/savedbtestplan", method = RequestMethod.POST) public @ResponseBody void db_save_plan(@RequestParam("dbdatas") String datas) throws SuspendExecution { // System.out.println(newTestPlan.getQuery().length); DbTestPlan newTestPlan = new DbTestPlan(); /* JSONObject obj = new JSONObject(dbdatas); */ String values[] = datas.split("---"); // System.out.println(values.length); newTestPlan.setReqRate(Integer.parseInt(values[0])); newTestPlan.setDuration(Integer.parseInt(values[1])); newTestPlan.setStartDelay(Integer.parseInt(values[2])); newTestPlan.setDbUrl(values[3]); newTestPlan.setDbDriver(values[4]); newTestPlan.setUname(values[5]); newTestPlan.setPasswd(values[6]); newTestPlan.setMaxConnections(Integer.parseInt(values[7])); // List<String> queries=(List<String>) obj.get("queries"); List<String> queries = new ArrayList<String>(); for (int i = 8; i < values.length; i++) queries.add(values[i]); newTestPlan.setQuery(queries); dbTestPlans.add(newTestPlan); // System.out.println(newTestPlan.getQuery()); /* * newTestPlan.setTestPlan(testPlan); * newTestPlan.setHttpreqlist(httpreqlist); * * testPlans.add(newTestPlan); * * testPlan = new ArrayList<Object>(); * * httpreqlist = new ArrayList<Integer>(); */ } @RequestMapping(value = "/savewstestplan", method = RequestMethod.POST) public @ResponseBody void ws_save_plan(@RequestParam("wsdatas") String datas) throws SuspendExecution { // System.out.println(newTestPlan.getQuery().length); WsTestPlan newTestPlan = new WsTestPlan(); /* JSONObject obj = new JSONObject(dbdatas); */ String values[] = datas.split("---"); // System.out.println(values.length); newTestPlan.setReqRate(Integer.parseInt(values[0])); newTestPlan.setDuration(Integer.parseInt(values[1])); newTestPlan.setStartDelay(Integer.parseInt(values[2])); // List<String> queries=(List<String>) obj.get("queries"); List<WsRequest> wsrequests = new ArrayList<WsRequest>(); for (int i = 3; i < values.length; i++) { String invalues[] = values[i].split("___"); WsRequest wsRequest = new WsRequest(); wsRequest.setUrl(invalues[0]); wsRequest.setSoapAction(invalues[1]); wsRequest.setXml(invalues[2]); wsrequests.add(wsRequest); } newTestPlan.setTestPlan(wsrequests); wsTestPlans.add(newTestPlan); } /* * @RequestMapping(value = "/hello", method = RequestMethod.GET) public * String index(Map<String, Object> model) throws SuspendExecution, * InterruptedException { Fiber.sleep(10); // * logger.debug("index() is executed!"); model.put("title", * helloWorldService.getTitle("")); model.put("msg", * helloWorldService.getDesc()); return "index"; } * * @RequestMapping(value = "/hello/{name:.+}", method = RequestMethod.GET) * public ModelAndView hello(@PathVariable("name") String name) throws * SuspendExecution, InterruptedException { Fiber.sleep(10); ModelAndView * model = new ModelAndView(); model.setViewName("index"); * model.addObject("title", helloWorldService.getTitle(name)); * model.addObject("msg", helloWorldService.getDesc()); return model; } */ @RequestMapping(value = "/normalloadgen", method = RequestMethod.POST) public @ResponseBody ResponseEntity<String> execute(ModelMap model, HttpSession session) throws SuspendExecution, InterruptedException, ExecutionException { // test = true; File f = new File("/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } normaltest.setTest(true); normaltest.setTestPlans(testPlans); normaltest.setOutputlist(new ArrayList<Output>()); normaltest.setSessionId(session.getId()); int rowstart = 0; if (logger.isInfoEnabled()) { logger.info("Starting"); } int ArraySize = normaltest.getTestPlans().size(); Fiber[] fibers = new Fiber[ArraySize]; // System.out.println(""); logger.info("<------------------------LoadGen Starting-------------------------->"); // System.out.println(""); int i = 1; // System.out.println("size "+testPlans.size()); for (TestPlan currtestplan : normaltest.getTestPlans()) { if (normaltest.getTest()) { System.out.println("Testplan" + i); currtestplan.setId(i); currtestplan.setRandom(0); currtestplan.setOutputrowstart(rowstart); rowstart += currtestplan.getHttpreqlist().size(); i++; for (int j = 0; j < currtestplan.getHttpreqlist().size(); j++) normaltest.getOutputlist().add(new Output()); Fiber<Void> testplansfiber = new Fiber<Void>(() -> { currtestplan.execute(null, normaltest); }).start(); int index = i - 2; fibers[index] = testplansfiber; } else { normaltest.setTest(true); break; } } for (Fiber fiber : fibers) { // try { if (!normaltest.getTest()) break; // System.out.println("hello"); fiber.join(); // System.out.println("da"); /* * } catch (ExecutionException e1) { // TODO Auto-generated catch * block e1.printStackTrace(); } */ } // test=false; if (logger.isInfoEnabled()) { logger.info("Test Finished"); } System.out.println("Test Finished"); return new ResponseEntity<String>(HttpStatus.OK); } static int log(int x, int base) { return (int) (Math.log(x) / Math.log(base)); } @RequestMapping(value = "/randomloadgen", method = RequestMethod.POST) public @ResponseBody ResponseEntity<String> execute( @ModelAttribute("SpringWeb") Test newTest, ModelMap model, HttpSession session) throws SuspendExecution, InterruptedException { // test = true; File f = new File("/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } int rowstart = 0; randomtest.setMaxreqRate(newTest.getMaxreqRate()); randomtest.setMaxduration(newTest.getMaxduration()); randomtest.setEpoch(newTest.getEpoch()); randomtest.setTestPlans(testPlans); randomtest.setTest(true); randomtest.setOutputlist(new ArrayList<Output>()); randomtest.setSessionId(session.getId()); if (logger.isInfoEnabled()) { logger.info("Starting"); } System.out.println(""); System.out .println("<------------------------LoadGen Starting-------------------------->"); System.out.println(""); logger.info("MaxReq Value" + " : " + randomtest.getMaxreqRate()); logger.info("MaxDur Value" + " : " + randomtest.getMaxduration()); logger.info("Epoch Value" + " : " + randomtest.getEpoch()); int filecount = 1; int flag, newepochcount = 0; /* * if (randomtest.getMaxreqRate() <= 500) flag = 0; else flag = 1; */ int totalepochs = randomtest.getMaxduration() / randomtest.getEpoch(); /* * if (flag == 0) newepochcount = randomtest.getMaxreqRate() / 2; else { * newepochcount = log(randomtest.getMaxreqRate(), 2); newepochcount -= * 2; } * * totalepochs = Math.min(totalepochs, newepochcount); */ logger.info("Total Epochs: " + totalepochs); int currMaxReqRate = 0, remainingMix, newMix, currrateindex = 0; List<Integer> requestMix = new ArrayList<Integer>(); List<List<TestPlan>> testPlanslist = new ArrayList<List<TestPlan>>(); /* * if (flag == 0) currMaxReqRate = 0; else currMaxReqRate = 4; */ for (int currepoch = 0; currepoch < totalepochs; currepoch++) { if (randomtest.getMaxreqRate() != 0) { /* * if (flag == 0) currMaxReqRate += 2; else currMaxReqRate *= 2; */ currMaxReqRate = randInt(1, randomtest.getMaxreqRate()); } else currMaxReqRate = 0; remainingMix = currMaxReqRate; requestMix.clear(); for (int i = 0; i < randomtest.getTestPlans().size() - 1; ++i) { if (remainingMix != 0) newMix = randInt(1, remainingMix); else newMix = 0; requestMix.add(newMix); remainingMix -= newMix; } requestMix.add(remainingMix); Iterator<Integer> listIterator = requestMix.iterator(); logger.info("Current Epoch : " + currepoch); logger.info("Current Total Request Rate : " + currMaxReqRate); currrateindex = 0; List<TestPlan> newtestPlans = new ArrayList<TestPlan>(); for (int i = 0; i < randomtest.getTestPlans().size(); i++) { TestPlan copycurtest = copyTestPlan(randomtest.getTestPlans() .get(i)); newtestPlans.add(copycurtest); } // newtestPlans=testPlans; for (int k = 0; k < randomtest.getTestPlans().size(); k++) { logger.info("Current Request Rate" + requestMix.get(k)); newtestPlans.get(k).setReqRate(requestMix.get(k)); newtestPlans.get(k).setDuration(randomtest.getEpoch()); newtestPlans.get(k).setId(k + 1); } testPlanslist.add(newtestPlans); } int ArraySize = testPlanslist.size() * testPlan.size(); Fiber[] fibers = new Fiber[ArraySize]; /* Fiber<Void> testplansfiber = new Fiber<Void>(() -> { */ int k = 0; for (List<TestPlan> currtestPlans : testPlanslist) { int i = 1; for (TestPlan currtestplan : currtestPlans) { if (randomtest.getTest()) { /* * System.out.println("outside testplan"); * currtestplan.displayPlan(); System.out.println(""); */ /* * System.out.println("Testplan" + filecount); * * currtestplan.setFilenum(filecount); */ // filecount++; /* * logger.info("Current Request Rate" + * requestMix.get(currrateindex)); */ /* * currtestplan.setReqRate(listIterator.next()); * currtestplan.setDuration(randomtest.getEpoch()); */ currtestplan.setRandom(1); currtestplan.setId(i); currtestplan.setOutputrowstart(rowstart); rowstart += currtestplan.getHttpreqlist().size(); i++; for (int j = 0; j < currtestplan.getHttpreqlist().size(); j++) randomtest.getOutputlist().add(new Output()); Fiber<Void> testplansfiber = new Fiber<Void>(() -> { /* * System.out.println("outside testplan"); * currtestplan.displayPlan(); System.out.println(""); */ // currrateindex++; currtestplan.execute(null, randomtest); }).start(); /* * int index=(k*currtestPlans.size())+(i-2); * fibers[index]=testplansfiber; */ } else { randomtest.setTest(true); break; } } k++; Fiber.sleep(randomtest.getEpoch() * 1000); logger.info(""); } /* * for (Fiber fiber : fibers) { try { if (!test) break; fiber.join(); } * catch (ExecutionException e1) { // TODO Auto-generated catch block * e1.printStackTrace(); } } */ if (logger.isInfoEnabled()) { logger.info("Test Finished"); } System.out.println("Test Finished"); return new ResponseEntity<String>(HttpStatus.OK); } @RequestMapping(value = "/dbloadgen", method = RequestMethod.POST) public @ResponseBody ResponseEntity<String> executedb(ModelMap model, HttpSession session) throws SuspendExecution, InterruptedException, ExecutionException { File f = new File("/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } dbtest.setTest(true); dbtest.setDbTestPlans(dbTestPlans); dbtest.setOutputlist(new ArrayList<Output>()); dbtest.setSessionId(session.getId()); int ArraySize = dbtest.getDbTestPlans().size(); Fiber[] fibers = new Fiber[ArraySize]; // System.out.println(""); logger.info("<------------------------LoadGen Starting-------------------------->"); // System.out.println(""); int rowstart = 0; int i = 1; // System.out.println("size "+testPlans.size()); for (DbTestPlan currtestplan : dbtest.getDbTestPlans()) { if (dbtest.getTest()) { System.out.println("Testplan" + i); currtestplan.setId(i); currtestplan.setRandom(0); currtestplan.setOutputrowstart(rowstart); rowstart += currtestplan.getQuery().size(); i++; for (int j = 0; j < currtestplan.getQuery().size(); j++) dbtest.getOutputlist().add(new Output()); Fiber<Void> testplansfiber = new Fiber<Void>(() -> { currtestplan.execute(null, dbtest); }).start(); int index = i - 2; fibers[index] = testplansfiber; } else { dbtest.setTest(true); break; } } for (Fiber fiber : fibers) { // try { if (!dbtest.getTest()) break; // System.out.println("hello"); fiber.join(); // System.out.println("da"); /* * } catch (ExecutionException e1) { // TODO Auto-generated catch * block e1.printStackTrace(); } */ } // test=false; if (logger.isInfoEnabled()) { logger.info("Test Finished"); } System.out.println("Test Finished"); return new ResponseEntity<String>(HttpStatus.OK); } @RequestMapping(value = "/wsloadgen", method = RequestMethod.POST) public @ResponseBody ResponseEntity<String> executews(ModelMap model, HttpSession session) throws SuspendExecution, InterruptedException, ExecutionException { File f = new File("/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } wstest.setTest(true); wstest.setWsTestPlans(wsTestPlans); wstest.setOutputlist(new ArrayList<Output>()); wstest.setSessionId(session.getId()); int ArraySize = wstest.getWsTestPlans().size(); Fiber[] fibers = new Fiber[ArraySize]; // System.out.println(""); logger.info("<------------------------LoadGen Starting-------------------------->"); // System.out.println(""); int rowstart = 0; int i = 1; // System.out.println("size "+testPlans.size()); for (WsTestPlan currtestplan : wsTestPlans) { if (wstest.getTest()) { System.out.println("Testplan" + i); currtestplan.setId(i); currtestplan.setRandom(0); currtestplan.setOutputrowstart(rowstart); rowstart += currtestplan.getTestPlan().size(); i++; for (int j = 0; j < currtestplan.getTestPlan().size(); j++) wstest.getOutputlist().add(new Output()); Fiber<Void> testplansfiber = new Fiber<Void>(() -> { currtestplan.execute(null, wstest); }).start(); int index = i - 2; fibers[index] = testplansfiber; } else { wstest.setTest(true); break; } } for (Fiber fiber : fibers) { // try { if (!wstest.getTest()) break; // System.out.println("hello"); fiber.join(); // System.out.println("da"); /* * } catch (ExecutionException e1) { // TODO Auto-generated catch * block e1.printStackTrace(); } */ } // test=false; if (logger.isInfoEnabled()) { logger.info("Test Finished"); } System.out.println("Test Finished"); return new ResponseEntity<String>(HttpStatus.OK); } public TestPlan copyTestPlan(TestPlan orig) throws SuspendExecution { TestPlan copy = new TestPlan(); copy.setDuration(orig.getDuration()); copy.setId(orig.getId()); copy.setHttpreqlist(orig.getHttpreqlist()); copy.setReqRate(orig.getReqRate()); copy.setStartDelay(orig.getStartDelay()); copy.setTestPlan(orig.getTestPlan()); return copy; } /* * public static List<TestPlan> cloneList(List<TestPlan> list) { * List<TestPlan> clone = new ArrayList<TestPlan>(list.size()); for(TestPlan * item: list) clone.add((TestPlan) item.clone()); return clone; } */ @RequestMapping(value = "/randomfileloadgen", method = RequestMethod.POST) public void execute(HttpSession session) throws SuspendExecution, InterruptedException { // test=true; File f = new File("/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } // testPlans = randomtest.getTestPlans(); randomtest.setTest(true); randomtest.setOutputlist(new ArrayList<Output>()); randomtest.setSessionId(session.getId()); int rowstart = 0; if (logger.isInfoEnabled()) { logger.info("Starting"); } System.out.println(""); System.out .println("<------------------------LoadGen Starting-------------------------->"); System.out.println(""); logger.info("MaxReq Value" + " : " + randomtest.getMaxreqRate()); logger.info("MaxDur Value" + " : " + randomtest.getMaxduration()); logger.info("Epoch Value" + " : " + randomtest.getEpoch()); int filecount = 1; int flag, newepochcount = 0; /* * if (randomtest.getMaxreqRate() <= 500) flag = 0; else flag = 1; */ int totalepochs = randomtest.getMaxduration() / randomtest.getEpoch(); /* * if (flag == 0) newepochcount = randomtest.getMaxreqRate() / 2; else { * newepochcount = log(randomtest.getMaxreqRate(), 2); newepochcount -= * 2; } * * totalepochs = Math.min(totalepochs, newepochcount); */ logger.info("Total Epochs: " + totalepochs); int currMaxReqRate = 0, remainingMix, newMix, currrateindex = 0; List<Integer> requestMix = new ArrayList<Integer>(); List<List<TestPlan>> testPlanslist = new ArrayList<List<TestPlan>>(); /* * if (flag == 0) currMaxReqRate = 0; else currMaxReqRate = 4; */ for (int currepoch = 0; currepoch < totalepochs; currepoch++) { if (randomtest.getMaxreqRate() != 0) { /* * if (flag == 0) currMaxReqRate += 2; else currMaxReqRate *= 2; */ currMaxReqRate = randInt(1, randomtest.getMaxreqRate()); } else currMaxReqRate = 0; remainingMix = currMaxReqRate; requestMix.clear(); for (int i = 0; i < randomtest.getTestPlans().size() - 1; ++i) { if (remainingMix != 0) newMix = randInt(1, remainingMix); else newMix = 0; requestMix.add(newMix); remainingMix -= newMix; } requestMix.add(remainingMix); Iterator<Integer> listIterator = requestMix.iterator(); logger.info("Current Epoch : " + currepoch); logger.info("Current Total Request Rate : " + currMaxReqRate); currrateindex = 0; List<TestPlan> newtestPlans = new ArrayList<TestPlan>(); for (int i = 0; i < randomtest.getTestPlans().size(); i++) { TestPlan copycurtest = copyTestPlan(randomtest.getTestPlans() .get(i)); newtestPlans.add(copycurtest); } // newtestPlans=testPlans; for (int k = 0; k < randomtest.getTestPlans().size(); k++) { logger.info("Current Request Rate" + requestMix.get(k)); newtestPlans.get(k).setReqRate(requestMix.get(k)); newtestPlans.get(k).setDuration(randomtest.getEpoch()); newtestPlans.get(k).setId(k + 1); } testPlanslist.add(newtestPlans); } int ArraySize = testPlanslist.size() * testPlan.size(); Fiber[] fibers = new Fiber[ArraySize]; int k = 0; /* Fiber<Void> testplansfiber = new Fiber<Void>(() -> { */ for (List<TestPlan> currtestPlans : testPlanslist) { int i = 1; for (TestPlan currtestplan : currtestPlans) { if (randomtest.getTest()) { currtestplan.setRandom(1); currtestplan.setId(i); currtestplan.setOutputrowstart(rowstart); rowstart += currtestplan.getHttpreqlist().size(); i++; for (int j = 0; j < currtestplan.getHttpreqlist().size(); j++) randomtest.getOutputlist().add(new Output()); Fiber<Void> testplansfiber = new Fiber<Void>(() -> { /* * System.out.println("outside testplan"); * currtestplan.displayPlan(); System.out.println(""); */ currtestplan.execute(null, randomtest); }).start(); } else { randomtest.setTest(true); break; } } k++; Fiber.sleep(randomtest.getEpoch() * 1000); logger.info(""); } /* * for (Fiber fiber : fibers) { try { if (!test) break; fiber.join(); } * catch (ExecutionException e1) { // TODO Auto-generated catch block * e1.printStackTrace(); } } */ if (logger.isInfoEnabled()) { logger.info("Test Finished"); } System.out.println("Test Finished"); } /** * Upload single file using Spring Controller */ @RequestMapping(value = "/normaluploadFile", method = RequestMethod.POST) public @ResponseBody String normaluploadFile( @RequestParam("fileName") MultipartFile file, HttpSession session) throws SuspendExecution { if (!file.isEmpty()) { try { // testPlans.clear(); /* * testPlan.clear(); dbTestPlans.clear(); wsTestPlans.clear(); * httpreqlist.clear(); randomtest = new Test(); normaltest = * new Test(); //globalregexmap.clear(); //outputlist.clear(); * //test = true; */ randomtest = new Test(); normaltest = new Test(); dbtest = new Test(); wstest = new Test(); testPlans = new ArrayList<TestPlan>(); dbTestPlans = new ArrayList<DbTestPlan>(); wsTestPlans = new ArrayList<WsTestPlan>(); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); File f = new File( "/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); * if (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File dir = new File("webapps/LoadGen/resources/tmpFiles"); if (!dir.exists()) { if (dir.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } byte[] bytes = file.getBytes(); /* * File dir = new File("webapps/LoadGen/resources/tmpFiles"); // * System.out.println(dir.getPath()); if (!dir.exists()) * dir.mkdirs(); */ // Create the file on server File serverFile = new File(dir.getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); BufferedOutputStream stream = new BufferedOutputStream( new FileOutputStream(serverFile)); stream.write(bytes); stream.close(); /* * testPlans.clear(); globalregexmap.clear(); */ testPlans = Serializer.deserialzeTestPlanObject(dir .getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); /* * for (int i = 0; i < testPlans.size(); i++) { * System.out.println(testPlans.get(i)); } */ /* * logger.info("Server File Location=" + * serverFile.getAbsolutePath()); */ return "You successfully uploaded file=" + file.getOriginalFilename(); } catch (Exception e) { return "You failed to upload " + file.getOriginalFilename() + " => " + e.getMessage(); } } else { return "You failed to upload " + file.getOriginalFilename() + " because the file was empty."; } } @RequestMapping(value = "/randomuploadFile", method = RequestMethod.POST) public @ResponseBody String randomuploadFile( @RequestParam("fileName") MultipartFile file, HttpSession session) throws SuspendExecution { /* * System.out.println(getClass().getClassLoader().getResource( * "logging.properties")); * System.out.println(MainController.class.getClassLoader * ().getResource("logging.properties")); */ // System.out.println("file upload"); if (!file.isEmpty()) { try { /* * testPlans.clear(); testPlan.clear(); dbTestPlans.clear(); * wsTestPlans.clear(); httpreqlist.clear(); randomtest = new * Test(); normaltest = new Test(); globalregexmap.clear(); * outputlist.clear(); test = true; */ randomtest = new Test(); normaltest = new Test(); dbtest = new Test(); wstest = new Test(); testPlans = new ArrayList<TestPlan>(); dbTestPlans = new ArrayList<DbTestPlan>(); wsTestPlans = new ArrayList<WsTestPlan>(); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); // outputlist = new ArrayList<Output>(); // globalregexmap = new HashMap<String, List<String>>(); // Log File Creation File f = new File( "/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); * if (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File dir = new File("webapps/LoadGen/resources/tmpFiles"); if (!dir.exists()) { if (dir.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } byte[] bytes = file.getBytes(); // System.out.println(file.getName()); // System.out.println(file.getOriginalFilename()); // Creating the directory to store file // String rootPath = System.getProperty("/home/stanly"); /* * File dir = new File("webapps/LoadGen/resources/tmpFiles"); // * System.out.println(dir.getPath()); if (!dir.exists()) * dir.mkdirs(); */ // Create the file on server File serverFile = new File(dir.getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); BufferedOutputStream stream = new BufferedOutputStream( new FileOutputStream(serverFile)); stream.write(bytes); stream.close(); randomtest = Serializer.deserialzeTestObject(dir .getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); System.out.println(randomtest.getTestPlans().size()); return "You successfully uploaded file=" + file.getOriginalFilename(); } catch (Exception e) { return "You failed to upload " + file.getOriginalFilename() + " => " + e.getMessage(); } } else { return "You failed to upload " + file.getOriginalFilename() + " because the file was empty."; } } @RequestMapping(value = "/dbuploadFile", method = RequestMethod.POST) public @ResponseBody String dbuploadFile( @RequestParam("fileName") MultipartFile file, HttpSession session) throws SuspendExecution { if (!file.isEmpty()) { try { /* * testPlans.clear(); testPlan.clear(); dbTestPlans.clear(); * wsTestPlans.clear(); httpreqlist.clear(); randomtest = new * Test(); normaltest = new Test(); globalregexmap.clear(); * outputlist.clear(); test = true; */ randomtest = new Test(); normaltest = new Test(); dbtest = new Test(); wstest = new Test(); testPlans = new ArrayList<TestPlan>(); dbTestPlans = new ArrayList<DbTestPlan>(); wsTestPlans = new ArrayList<WsTestPlan>(); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); // outputlist = new ArrayList<Output>(); // globalregexmap = new HashMap<String, List<String>>(); File f = new File( "/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); * if (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File dir = new File("webapps/LoadGen/resources/tmpFiles"); if (!dir.exists()) { if (dir.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } byte[] bytes = file.getBytes(); /* * File dir = new File("webapps/LoadGen/resources/tmpFiles"); // * System.out.println(dir.getPath()); if (!dir.exists()) * dir.mkdirs(); */ // Create the file on server File serverFile = new File(dir.getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); BufferedOutputStream stream = new BufferedOutputStream( new FileOutputStream(serverFile)); stream.write(bytes); stream.close(); /* * testPlans.clear(); globalregexmap.clear(); */ dbTestPlans = Serializer.deserialzeDbTestPlanObject(dir .getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); return "You successfully uploaded file=" + file.getOriginalFilename(); } catch (Exception e) { return "You failed to upload " + file.getOriginalFilename() + " => " + e.getMessage(); } } else { return "You failed to upload " + file.getOriginalFilename() + " because the file was empty."; } } @RequestMapping(value = "/wsuploadFile", method = RequestMethod.POST) public @ResponseBody String wsuploadFile( @RequestParam("fileName") MultipartFile file, HttpSession session) throws SuspendExecution { if (!file.isEmpty()) { try { /* * testPlans.clear(); testPlan.clear(); dbTestPlans.clear(); * wsTestPlans.clear(); httpreqlist.clear(); randomtest = new * Test(); normaltest = new Test(); globalregexmap.clear(); * outputlist.clear(); test = true; */ randomtest = new Test(); normaltest = new Test(); dbtest = new Test(); wstest = new Test(); testPlans = new ArrayList<TestPlan>(); dbTestPlans = new ArrayList<DbTestPlan>(); wsTestPlans = new ArrayList<WsTestPlan>(); testPlan = new ArrayList<Object>(); httpreqlist = new ArrayList<Integer>(); // outputlist = new ArrayList<Output>(); // globalregexmap = new HashMap<String, List<String>>(); File f = new File( "/home/stanly/Project/LoadGenerator/loadgen.log"); PrintWriter writer; try { writer = new PrintWriter(f); writer.print(""); writer.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); * if (folder.exists()) { logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * logger.info(folder.getAbsolutePath()); * logger.info("folder not exists"); } */ File dir = new File("webapps/LoadGen/resources/tmpFiles"); if (!dir.exists()) { if (dir.mkdir()) { logger.info("Directory is created!"); } else { logger.info("Failed to create directory!"); } } byte[] bytes = file.getBytes(); /* * File dir = new File("webapps/LoadGen/resources/tmpFiles"); // * System.out.println(dir.getPath()); if (!dir.exists()) * dir.mkdirs(); */ // Create the file on server File serverFile = new File(dir.getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); BufferedOutputStream stream = new BufferedOutputStream( new FileOutputStream(serverFile)); stream.write(bytes); stream.close(); /* * testPlans.clear(); globalregexmap.clear(); */ wsTestPlans = Serializer.deserialzeWsTestPlanObject(dir .getAbsolutePath() + File.separator + session.getId() + file.getOriginalFilename()); return "You successfully uploaded file=" + file.getOriginalFilename(); } catch (Exception e) { return "You failed to upload " + file.getOriginalFilename() + " => " + e.getMessage(); } } else { return "You failed to upload " + file.getOriginalFilename() + " because the file was empty."; } } @RequestMapping(value = "/createsummary", method = RequestMethod.POST) public @ResponseBody String createSummary(HttpSession session) throws Exception, SuspendExecution { // System.out.println(session.getId()); Document document = new Document(); float fntSize, lineSpacing; List<Output> outputlist = new ArrayList<Output>(); if (normaltest.getTest()) outputlist = normaltest.getOutputlist(); else if (randomtest.getTest()) outputlist = randomtest.getOutputlist(); else if (dbtest.getTest()) outputlist = dbtest.getOutputlist(); else if (wstest.getTest()) outputlist = wstest.getOutputlist(); fntSize = 16f; lineSpacing = 10f; try { PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("webapps/LoadGen/resources/tmpFiles/" + session.getId() + "summary.pdf")); document.open(); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); Paragraph heading = new Paragraph(new Phrase(lineSpacing, "Test Summary", FontFactory.getFont(FontFactory.COURIER, fntSize))); heading.setAlignment(Element.ALIGN_CENTER); document.add(heading); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); for (int i = 0; i < outputlist.size(); i++) { Paragraph title = new Paragraph(outputlist.get(i).getRequest()); document.add(Chunk.NEWLINE); title.setAlignment(Element.ALIGN_CENTER); document.add(title); PdfPTable table = new PdfPTable(5); // 2 columns. table.setHorizontalAlignment(Element.ALIGN_CENTER); table.setWidthPercentage(90); // Width 100% table.setSpacingBefore(10f); // Space before table table.setSpacingAfter(10f); // Space after table float[] columnWidths = { 1f, 1f, 1f, 1f, 1f }; table.setWidths(columnWidths); PdfPCell cell1 = new PdfPCell(new Paragraph("Request Rate")); cell1.setBorderColor(BaseColor.BLACK); cell1.setPaddingLeft(10); cell1.setHorizontalAlignment(Element.ALIGN_CENTER); cell1.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell2 = new PdfPCell(new Paragraph("Duration")); cell2.setBorderColor(BaseColor.BLACK); cell2.setPaddingLeft(10); cell2.setHorizontalAlignment(Element.ALIGN_CENTER); cell2.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell3 = new PdfPCell(new Paragraph( "Average Throughput")); cell3.setBorderColor(BaseColor.BLACK); cell3.setPaddingLeft(10); cell3.setHorizontalAlignment(Element.ALIGN_CENTER); cell3.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell4 = new PdfPCell(new Paragraph( "Average Response Time")); cell4.setBorderColor(BaseColor.BLACK); cell4.setPaddingLeft(10); cell4.setHorizontalAlignment(Element.ALIGN_CENTER); cell4.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell5 = new PdfPCell(new Paragraph("Error Rate")); cell5.setBorderColor(BaseColor.BLACK); cell5.setPaddingLeft(10); cell5.setHorizontalAlignment(Element.ALIGN_CENTER); cell5.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell6 = new PdfPCell(new Paragraph(outputlist.get(i) .getInputload())); cell6.setBorderColor(BaseColor.BLACK); cell6.setPaddingLeft(10); cell6.setHorizontalAlignment(Element.ALIGN_CENTER); cell6.setVerticalAlignment(Element.ALIGN_MIDDLE); // System.out.println("durt"+ outputlist.get(i).getDuration()); PdfPCell cell7 = new PdfPCell(new Paragraph(outputlist.get(i) .getDuration() + " sec")); cell7.setBorderColor(BaseColor.BLACK); cell7.setPaddingLeft(10); cell7.setHorizontalAlignment(Element.ALIGN_CENTER); cell7.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell8 = new PdfPCell(new Paragraph(outputlist.get(i) .getAvgThroughput())); cell8.setBorderColor(BaseColor.BLACK); cell8.setPaddingLeft(10); cell8.setHorizontalAlignment(Element.ALIGN_CENTER); cell8.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell9 = new PdfPCell(new Paragraph(outputlist.get(i) .getAvgResponsetime())); cell9.setBorderColor(BaseColor.BLACK); cell9.setPaddingLeft(10); cell9.setHorizontalAlignment(Element.ALIGN_CENTER); cell9.setVerticalAlignment(Element.ALIGN_MIDDLE); PdfPCell cell10 = new PdfPCell(new Paragraph(outputlist.get(i) .getErrorrate())); cell10.setBorderColor(BaseColor.BLACK); cell10.setPaddingLeft(10); cell10.setHorizontalAlignment(Element.ALIGN_CENTER); cell10.setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell1); table.addCell(cell2); table.addCell(cell3); table.addCell(cell4); table.addCell(cell5); table.addCell(cell6); table.addCell(cell7); table.addCell(cell8); table.addCell(cell9); table.addCell(cell10); document.add(table); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); DefaultCategoryDataset tptgraph = new DefaultCategoryDataset(); try (BufferedReader br = new BufferedReader(new FileReader( "webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "tpt.txt"))) { // tptgraph.addValue(0, "Throughput" , 0" ); for (String line; (line = br.readLine()) != null;) { // process the line. String values[] = line.split(" ", 2); tptgraph.addValue(Integer.parseInt(values[1]), "Throughput", values[0]); } // line is not visible here. } JFreeChart lineChartObject = ChartFactory.createLineChart( "Time Vs Throughput", "Time", "Throughput", tptgraph, PlotOrientation.VERTICAL, true, true, false); int width = 640; int height = 480; File lineChart = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "tpt.jpeg"); ChartUtilities.saveChartAsJPEG(lineChart, lineChartObject, width, height); DefaultCategoryDataset respgraph = new DefaultCategoryDataset(); try (BufferedReader br = new BufferedReader(new FileReader( "webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "resp.txt"))) { for (String line; (line = br.readLine()) != null;) { // process the line. String values[] = line.split(" ", 2); respgraph.addValue(Integer.parseInt(values[1]), "Response Time", values[0]); } // line is not visible here. } lineChartObject = ChartFactory.createLineChart( "Time Vs Response Time", "Time", "Response Time", respgraph, PlotOrientation.VERTICAL, true, true, false); lineChart = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "resp.jpeg"); ChartUtilities.saveChartAsJPEG(lineChart, lineChartObject, width, height); DefaultCategoryDataset errgraph = new DefaultCategoryDataset(); try (BufferedReader br = new BufferedReader(new FileReader( "webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "err.txt"))) { for (String line; (line = br.readLine()) != null;) { // process the line. String values[] = line.split(" ", 2); errgraph.addValue(Integer.parseInt(values[1]), "Error Rate", values[0]); } // line is not visible here. } lineChartObject = ChartFactory.createLineChart( "Time Vs Error Rate", "Time", "Error Rate", errgraph, PlotOrientation.VERTICAL, true, true, false); lineChart = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "err.jpeg"); ChartUtilities.saveChartAsJPEG(lineChart, lineChartObject, width, height); table = new PdfPTable(3); table.setWidthPercentage(100); table.addCell(createImageCell("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "tpt.jpeg")); table.addCell(createImageCell("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "resp.jpeg")); table.addCell(createImageCell("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "err.jpeg")); document.add(table); } document.addAuthor("Stanly Thomas"); document.addCreationDate(); document.addCreator("LoadGen.com"); document.addTitle("Test Summary"); document.addSubject("The summary of the load test"); document.close(); writer.close(); } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { for (int i = 0; i < outputlist.size(); i++) { File file = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "tpt.jpeg"); deleteFolder(file); file = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "tpt.txt"); deleteFolder(file); file = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "resp.jpeg"); deleteFolder(file); file = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "resp.txt"); deleteFolder(file); file = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "err.txt"); deleteFolder(file); file = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + outputlist.get(i).getRequest() + "err.jpeg"); deleteFolder(file); } } return "success"; } public static PdfPCell createImageCell(String path) throws DocumentException, IOException { Image img = Image.getInstance(path); PdfPCell cell = new PdfPCell(img, true); return cell; } @RequestMapping(value = "/normalsavetofile", method = RequestMethod.POST) public @ResponseBody String normalsaveToFile(HttpSession session) throws Exception, SuspendExecution { /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { //logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * //logger.info(folder.getAbsolutePath()); * //logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { // logger.info("Directory is created!"); } else { // logger.info("Failed to create directory!"); } } File downloadtest = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + "test.xml"); Serializer.serializeTestPlanObject(testPlans, downloadtest.getAbsolutePath()); return downloadtest.getAbsolutePath(); } @RequestMapping(value = "/randomsavetofile", method = RequestMethod.POST) public @ResponseBody String randomsaveToFile( @ModelAttribute("SpringWeb") Test newTest, HttpSession session) throws Exception, SuspendExecution { /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { //logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * //logger.info(folder.getAbsolutePath()); * //logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { // logger.info("Directory is created!"); } else { // logger.info("Failed to create directory!"); } } File downloadtest = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + "test.xml"); newTest.setTestPlans(testPlans); Serializer.serializeTestObject(newTest, downloadtest.getAbsolutePath()); /* * List<TestPlan> testlist = new ArrayList<TestPlan>(); * testlist=Serializer * .deserialzeAddress(downloadtest.getAbsolutePath()); for(int * i=0;i<testlist.size();i++){ System.out.println(testlist.get(i)); } */ return downloadtest.getAbsolutePath(); } @RequestMapping(value = "/dbsavetofile", method = RequestMethod.POST) public @ResponseBody String dbsaveToFile(HttpSession session) throws Exception, SuspendExecution { /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { //logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * //logger.info(folder.getAbsolutePath()); * //logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { // logger.info("Directory is created!"); } else { // logger.info("Failed to create directory!"); } } File downloadtest = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + "test.xml"); // System.out.println("hi"); Serializer.serializeDbTestPlanObject(dbTestPlans, downloadtest.getAbsolutePath()); return downloadtest.getAbsolutePath(); } @RequestMapping(value = "/wssavetofile", method = RequestMethod.POST) public @ResponseBody String wssaveToFile(HttpSession session) throws Exception, SuspendExecution { /* * File folder = new File("webapps/LoadGen/resources/tmpFiles"); if * (folder.exists()) { //logger.info(folder.getAbsolutePath()); * deleteFolder(folder); } else { * //logger.info(folder.getAbsolutePath()); * //logger.info("folder not exists"); } */ File file = new File("webapps/LoadGen/resources/tmpFiles"); if (!file.exists()) { if (file.mkdir()) { // logger.info("Directory is created!"); } else { // logger.info("Failed to create directory!"); } } File downloadtest = new File("webapps/LoadGen/resources/tmpFiles/" + session.getId() + "test.xml"); // System.out.println("hi"); Serializer.serializeWsTestPlanObject(wsTestPlans, downloadtest.getAbsolutePath()); return downloadtest.getAbsolutePath(); } @RequestMapping(value = "/stop", method = RequestMethod.POST) public @ResponseBody void stopTest() throws SuspendExecution { // outputlist.clear(); normaltest.setTest(false); randomtest.setTest(false); wstest.setTest(false); dbtest.setTest(false); // test = false; } @RequestMapping(value = "/output", method = RequestMethod.POST) public @ResponseBody String outputTable() throws SuspendExecution { String tabledata = "<table class='table table-striped table-bordered table-condensed well' id='outtable'>"; String firstrow = "<tr>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Time</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Request</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Input Load</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Avg Throughput</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Cur Throughput</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Cur Response Time</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Error Rate</td>"; firstrow += "<td class='ui-helper-center' style='vertical-align: middle;'>Graphs</td>"; firstrow += "</tr>"; tabledata += firstrow; List<Output> outputlist = new ArrayList<Output>(); if (normaltest.getTest()) outputlist = normaltest.getOutputlist(); else if (randomtest.getTest()) outputlist = randomtest.getOutputlist(); else if (dbtest.getTest()) outputlist = dbtest.getOutputlist(); else if (wstest.getTest()) outputlist = wstest.getOutputlist(); else{ tabledata += "</table>"; return tabledata; } for (int i = 0; i < outputlist.size(); i++) { String newrow = "<tr>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getTime() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getRequest() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getInputload() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getAvgThroughput() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getCurThroughput() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getResponsetime() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'>" + outputlist.get(i).getErrorrate() + "</td>"; newrow += "<td class='ui-helper-center' style='vertical-align: middle;'><input type='button' id='graphButton' class='btn btn-default btnGraph' value='Graphs'> </td>"; newrow += "</tr>"; tabledata += newrow; } tabledata += "</table>"; // System.out.println(tabledata); return tabledata; } @RequestMapping(value = "/graph", method = RequestMethod.POST) public @ResponseBody String graph(@RequestParam("rownum") int rownum) throws SuspendExecution { String data = ""; List<Output> outputlist = new ArrayList<Output>(); if (normaltest.getTest()) outputlist = normaltest.getOutputlist(); else if (randomtest.getTest()) outputlist = randomtest.getOutputlist(); else if (dbtest.getTest()) outputlist = dbtest.getOutputlist(); else if (wstest.getTest()) outputlist = wstest.getOutputlist(); // for (int i = 0; i < outputlist.size(); i++) { /* * data += outputlist.get(i).getCurThroughput().split(" ", 2)+" " + * outputlist.get(i).getResponsetime().split(" ", 2)+" " + * outputlist.get(i).getErrorrate().split("%", 2); */ rownum--; String tpt[] = outputlist.get(rownum).getCurThroughput().split(" ", 2); String rsp[] = outputlist.get(rownum).getResponsetime().split(" ", 2); String err[] = outputlist.get(rownum).getErrorrate().split("%", 2); String time[] = outputlist.get(rownum).getTime().split(" ", 2); // System.out.println(time); data = tpt[0] + " " + rsp[0] + " " + err[0] + " " + time[0] + time[1]; // System.out.println(data); // System.out.println(rownum); // } return data; } public static void deleteFolder(File folder) throws SuspendExecution { File[] files = folder.listFiles(); try { if (files != null) { // some JVMs return null for empty dirs for (File f : files) { if (f.isDirectory()) { deleteFolder(f); } else { f.delete(); } } } folder.delete(); } catch (Exception e) { logger.info("failed to delete folder"); } } public static int randInt(int min, int max) throws SuspendExecution { // NOTE: Usually this should be a field rather than a method // variable so that it is not re-seeded every call. Random rand = new Random(); int randomNum = rand.nextInt((max - min) + 1) + min; return randomNum; } }